package com.aqie.easy.dynamicProgramming;

import java.util.ArrayList;
import java.util.List;

/**
 * 118. 杨辉三角
 */
public class PascalsTriangleGenerate {
    public List<List<Integer>> generate(int numRows) {
        List<List<Integer>> triangle = new ArrayList<List<Integer>>();
        if (numRows == 0) return triangle;

        // 1. 第一行永远是1
        triangle.add(new ArrayList<>());
        triangle.get(0).add(1);

        for (int rowNum = 1; rowNum < numRows; rowNum++){
            List<Integer> row = new ArrayList<>();
            List<Integer> prevRow = triangle.get(rowNum - 1);
            // 每行首尾均是1
            row.add(1);

            for (int j = 1; j < rowNum; j++){
                row.add(prevRow.get(j - 1) + prevRow.get(j));
            }
            row.add(1);
            triangle.add(row);
        }
        return triangle;
    }

    public List<List<Integer>> generate2(int numRows) {
        List<List<Integer>> triangle = new ArrayList<>();

        if (numRows <= 0) return triangle;
        for (int i = 0; i < numRows; i++){
            List<Integer> item = new ArrayList<>();
            for (int j = 0; j <= i; j++){
                if (j == 0 || j == i){
                    item.add(1);
                }else{
                    item.add(triangle.get(i-1).get(j-1) + triangle.get(i-1).get(j));
                }
            }
            triangle.add(item);
        }
        return triangle;
    }
}
